/**
 * 基础提示框代码
 *
 * @type {string}
 */
let prompt_html = `
    <div class="prompt-container">
        <div class="prompt-box">
            <div class="prompt-hd-box"></div>
            <div class="prompt-bd-box"></div>
            <div class="prompt-ft-box">
                <span class="prompt-right-tip"></span>
                <span class='clean-btn'>
                    <span>x</span>
                </span>
            </div>
        </div>
    </div>
`;

/**
 * 基本配置
 */
function getPromptConfig(){
    let promptConfig = window.$docsify.promptConfig || {};
    // 是否启动
    if (promptConfig.isEnable == undefined) {
        promptConfig.isEnable = true;
    }
    // 顶部标题
    if (!promptConfig.title) {
        promptConfig.title = '感谢关注作者';
    }
    // 内容
    if (!promptConfig.content) {
        promptConfig.content = `
            <img src='../../../static/img/logo/logo1.png' alt='' style='width: 130px'>
            <p style="font-size: 13px;line-height: 1.4;color: #0e1011;margin: 0;padding: 0;">万千小伙伴陪你一起学</p>
        `;
    }
    // 页脚左侧标题
    if (!promptConfig.ftTitle) {
        promptConfig.ftTitle = '小提示';
    }
    // 是否在封面显示
    if (!promptConfig.coverpageShow == undefined) {
        promptConfig.coverpageShow = false;
    }
    // 是否切换页面后显示
    if (!promptConfig.pageShow == undefined) {
        promptConfig.pageShow = false;
    }
    return promptConfig;
}

/**
 * 初始化提示框
 */
function initPrompt(){
    // 加载配置
    let promptConfig = this.getPromptConfig();
    if (!promptConfig.isEnable) {
        return;
    }
    // 加载html代码
    let $body = jQuery("body");
    $body.append(prompt_html);
    // 载入标题
    jQuery(".prompt-hd-box").html(promptConfig.title);
    // 载入内容
    jQuery(".prompt-bd-box").html(promptConfig.content);
    // 载入小提示
    jQuery(".prompt-ft-box > .prompt-right-tip").html(promptConfig.ftTitle);
    // 开启后默认显示
    let $promptContainer = jQuery(".prompt-container");
    $promptContainer.css("display", '');
}

/**
 * 载入插件
 *
 * @type {*[]}
 */
window.$docsify.plugins = [].concat(function(hook, vm) {

    // 钩子函数：每次路由切换时数据全部加载完成后调用，没有参数。
    hook.doneEach(function() {
        let promptConfig = this.getPromptConfig();
        if (!promptConfig.isEnable) {
            return;
        }
        let $promptContainer = jQuery(".prompt-container");
        if ($promptContainer.length == 0) {
            this.initPrompt();
            $promptContainer = jQuery(".prompt-container");
        }
        let file = vm.route.file;
        let path = vm.route.path;
        let isCoverpagePage = true;
        if (file !== 'README.md' && path !== '/') {
            isCoverpagePage = false;
        }
        let pageShow = promptConfig.pageShow;
        if (pageShow){
            $promptContainer.css("display", '');
        }
        let coverpageShow = promptConfig.coverpageShow;
        if (isCoverpagePage && !coverpageShow){
            $promptContainer.css("display", 'none');
            return;
        }
        let promptIsShow = $promptContainer.data("PROMPT_IS_SHOW");
        if (!isCoverpagePage && (!promptIsShow || promptIsShow != "true")) {
            // $promptContainer.data("PROMPT_IS_SHOW", "true");
            $promptContainer.css("display", '');
        }
    });

    // 初始化并第一次加载完成数据后调用，只触发一次，没有参数。
    hook.mounted(function() {
        let $promptContainer = jQuery(".prompt-container");
        if ($promptContainer.length == 0) {
            this.initPrompt();
        }
        // 添加关闭事件
        let $cleanBtn = jQuery(".clean-btn");
        $cleanBtn.click(function () {
            let $promptContainer = jQuery(".prompt-container");
            $promptContainer.css("display", "none");
            $promptContainer.data("PROMPT_IS_SHOW", "true");
        });
        // 添加移动事件
        let promptContainerElement = document.querySelector('.prompt-container');
        promptContainerElement.addEventListener('mousedown', function(event) {
            // 计算鼠标在登录框中的坐标
            let x = event.pageX - promptContainerElement.offsetLeft;
            let y = event.pageY - promptContainerElement.offsetTop;
            // 给页面添加鼠标移动事件
            document.addEventListener('mousemove', promptContainerMove);
            // 移动事件详情
            function promptContainerMove(event) {
                // 计算移动后的位置
                let left = event.pageX - x;
                let top = event.pageY - y;
                // 获取浏览器视图的宽度和高度
                let browserWidth = window.innerWidth;
                let browserHeight = window.innerHeight;
                // 获取登录框的宽度和高度
                let promptContainerWidth = promptContainerElement.offsetWidth;
                let promptContainerHeight = promptContainerElement.offsetHeight;
                // 计算右边界和下边界
                let rightBoundary = browserWidth - promptContainerWidth;
                let bottomBoundary = browserHeight - promptContainerHeight;
                // 调整位置，确保不超出右下边界
                left = Math.min(Math.max(left, 0), rightBoundary);
                top = Math.min(Math.max(top, 0), bottomBoundary);
                // 设置登录框的位置
                promptContainerElement.style.left = left + "px";
                promptContainerElement.style.top = top + "px";
                promptContainerElement.style.right = '';
            }
            // 鼠标松开后移除页面的鼠标移动事件
            document.addEventListener('mouseup', function() {
                document.removeEventListener('mousemove', promptContainerMove);
            });
        });
    });

}, window.$docsify.plugins);